package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class AbaCarrinho extends JPanel {

	private JLabel labelProdutos, labelTextoTotal, labelTotal;

	private JPanel painelSuperior, painelProdutos, painelInferior, painelTotal,
			painelBotoes;

	private JButton buttonPagamento, buttonEsvaziar;

	private JScrollPane scrollPane;

	public AbaCarrinho() {
		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

		labelProdutos = new JLabel("Produtosno Carrinho:");
		labelTextoTotal = new JLabel("Valor total dos Produtos: R$");
		labelTotal = new JLabel();

		buttonPagamento = new JButton("Pagamento");
		buttonPagamento.addActionListener(new Ouvinte(null));
		buttonEsvaziar = new JButton("Esvaziar Carrinho");
		buttonEsvaziar.addActionListener(new Ouvinte(null));
		
		painelProdutos = new JPanel();
		painelProdutos
				.setLayout(new BoxLayout(painelProdutos, BoxLayout.Y_AXIS));

		Iterator<Produto> it = Principal.itensCarrinho.keySet().iterator();

		while (it.hasNext()) {
			Produto p = it.next();
			JPanel painel = new JPanel();
			JLabel labelProduto;
			int max;
			int quantidadeDesejada;
			SpinnerModel model;
			JSpinner spinner;
			JLabel textoPreco;
			double precoUnitario;
			JLabel preco;
			JLabel textoTotal;
			JLabel total;
			JButton buttonRemove;

			labelProduto = new JLabel(p.getNome());

			max = p.getQuantidadeCarrinho();
			if (max > 10)
				max = 10;

			quantidadeDesejada = Principal.itensCarrinho.get(p);

			precoUnitario = p.getValorVenda();

			model = new SpinnerNumberModel(quantidadeDesejada, 1, max, 1);
			spinner = new JSpinner(model);

			textoPreco = new JLabel("X R$");
			preco = new JLabel(String.valueOf(precoUnitario));
			textoTotal = new JLabel("  = R$");

			String s = String.format("%.2f", ((Integer) spinner.getValue() * p
					.getValorVenda()));
			total = new JLabel(s);
			buttonRemove = new JButton("Remover");
			buttonRemove.addActionListener(new Ouvinte(painel));

			spinner.addChangeListener(new OuvinteSpinner(total, precoUnitario));

			painel.add(labelProduto);
			painel.add(spinner);
			painel.add(textoPreco);
			painel.add(preco);
			painel.add(textoTotal);
			painel.add(total);
			painel.add(buttonRemove);

			painelProdutos.add(painel);
		}

		painelSuperior = new JPanel();
		painelSuperior.add(labelProdutos);

		painelTotal = new JPanel();
		painelTotal.add(labelTextoTotal);
		painelTotal.add(labelTotal);
		painelBotoes = new JPanel();
		painelBotoes.add(buttonPagamento);
		painelBotoes.add(buttonEsvaziar);

		painelInferior = new JPanel();
		painelInferior
				.setLayout(new BoxLayout(painelInferior, BoxLayout.Y_AXIS));

		painelInferior.add(painelTotal);
		painelInferior.add(painelBotoes);

		scrollPane = new JScrollPane(painelProdutos);
		scrollPane
				.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

		this.add(painelSuperior);
		this.add(scrollPane);
		this.add(painelInferior);

	}

	class OuvinteSpinner implements ChangeListener {

		private JLabel label;
		private Double preco;
		private JSpinner spinner;

		public OuvinteSpinner(JLabel label, Double preco) {
			this.label = label;
			this.preco = preco;
		}

		public void stateChanged(ChangeEvent arg0) {
			// TODO Auto-generated method stub
			JSpinner spin = (JSpinner) arg0.getSource();

			String s = String.format("%.2f",
					((Integer) spin.getValue() * preco));
			this.label.setText(s);

		}

	}

	class Ouvinte implements ActionListener {
		private JPanel painel;

		public Ouvinte(JPanel painel) {
			this.painel = painel;
		}

		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			if (arg0.getSource() == buttonPagamento) {
				// comandos para pagamento
				Principal.tabManager.setEnabledAt("Pagamento", true);
				Principal.tabManager.setEnabledAt("Carrinho", false);
				Principal.tabManager.setSelectedTab("Pagamento");
				
			} else if (arg0.getSource() == buttonEsvaziar) {
				System.out.println("clicou");
				remove(painelProdutos);
				validate();
				
				painelProdutos.removeAll();
				validate();
				System.out.println("botaoesvaziar");
				
			} else { // action vei de algum botao remover
				painelProdutos.remove(this.painel);
				if (arg0.getSource() == buttonPagamento) {
					// comandos para pagamento
				} else if (arg0.getSource() == buttonEsvaziar) {
					// comandos para esvaziar
				} else { // action vei de algum botao remover
					painelProdutos.remove(painel);
					painelProdutos.validate();
					scrollPane.validate();
					validate();
				}

				validate();
			}

		}
	}
}
